package sdk3
{
    import flash.display.MovieClip;
    import flash.events.*;
    
    import mx.controls.SWFLoader;
    import mx.core.Container;
    import mx.events.FlexEvent;
    
	public class c_SWFLoader extends EventDispatcher
	{
		/*******************************************************************************
		* Software: c_SWFLoader									
		* Version:  1.1
		* Date:     2009_10_06_TIME_14:03:03     
		* Author:    
		* 	  * LICENSE:  GNU General Public License (http://www.gnu.org/licenses/gpl.html) 	 *  	 * English: 		This program is free software; 		you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; 		either version 3 of the License, or (at your option) any later version.   		This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 		without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 		See the GNU General Public License for more details. 		You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>.   		 * Excerpt English: 		 * Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), 		 * that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things   		Auf Deutsch: 		Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, 		weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version. 		Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, 		sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. 		Details finden Sie in der GNU General Public License. 		Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. 		Falls nicht, siehe <http://www.gnu.org/licenses/>.   		 * Auszug Deutsch: 		 * Wenn wir von freier Software sprechen, so beziehen wir uns auf Freiheit, nicht auf den Preis. 		 * Unsere Allgemeinen Öffentlichen Lizenzen sind darauf angelegt, sicherzustellen, daß Sie die Freiheit haben, 		 * Kopien freier Software zu verbreiten (und dafür etwas zu berechnen, wenn Sie möchten), die Möglichkeit, 		 * daß Sie die Software als Quelltext erhalten oder den Quelltext auf Wunsch bekommen, daß Sie die Software 		 * ändern oder Teile davon in neuen freien Programmen verwenden dürfen und daß Sie wissen, daß Sie dies alles tun dürfen.   GNU General Public License (http://www.gnu.org/licenses/gpl.html) 	 *  	 * English: 		This program is free software; 		you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; 		either version 3 of the License, or (at your option) any later version.   		This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 		without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 		See the GNU General Public License for more details. 		You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>.   		 * Excerpt English: 		 * Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), 		 * that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things   		Auf Deutsch: 		Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, 		weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version. 		Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, 		sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. 		Details finden Sie in der GNU General Public License. 		Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. 		Falls nicht, siehe <http://www.gnu.org/licenses/>.   		 * Auszug Deutsch: 		 * Wenn wir von freier Software sprechen, so beziehen wir uns auf Freiheit, nicht auf den Preis. 		 * Unsere Allgemeinen Öffentlichen Lizenzen sind darauf angelegt, sicherzustellen, daß Sie die Freiheit haben, 		 * Kopien freier Software zu verbreiten (und dafür etwas zu berechnen, wenn Sie möchten), die Möglichkeit, 		 * daß Sie die Software als Quelltext erhalten oder den Quelltext auf Wunsch bekommen, daß Sie die Software 		 * ändern oder Teile davon in neuen freien Programmen verwenden dürfen und daß Sie wissen, daß Sie dies alles tun dürfen. 
		 * 
		* Purpose:
		 * makes the lading of external swfs easy
		 * 
		 * features:
		 * 
		 * REQUIREMENTS WHAT ELSE IS NEEDED:
		 * 
		 * USAGE EXAMPLE: WITH EVENT LISTENER
		 * **/

        [Bindable] private var loaded:Boolean = false;
        private var SWF_CONTENT:MovieClip;
		
		/**
		 *  The SWFLoader control loads and displays a specified SWF file.
		 *  You typically use SWFLoader for loading one Flex application
		 *  into a host Flex application.
		 *
		 *  <p><strong>Note:</strong> You can use the SWFLoader control to load
		 *  a GIF, JPEG, or PNG image file at runtime, 
		 *  to load a ByteArray representing a SWF, GIF, JPEG, or PNG image at runtime, 
		 *  or load an embedded version of any of these file types, 
		 *  and SVG files, at compile time
		 *  by using <code>&#64;Embed(source='filename')</code>.
		 *  However, the Image control is better suited for this capability
		 *  and should be used for most image loading.
		 *  The Image control is also designed to be used
		 *  in custom item renderers and item editors. 
		 *  When using either SWFLoader or Image with an SVG file,
		 *  you can only load the SVG if it has been embedded in your
		 *  application using an Embed statement;
		 *  you cannot load an SVG from the network at runtime.</p>
		 *
		 *  <p>The SWFLoader control lets you scale its content and set its size. 
		 *  It can also resize itself to fit the size of its content.
		 *  By default, content is scaled to fit the size of the SWFLoader control.
		 *  It can also load content on demand programmatically,
		 *  and monitor the progress of a load.</p>  
		 *
		 *  <p>A SWFLoader control cannot receive focus.
		 *  However, the contents of a SWFLoader control can accept focus
		 *  and have its own focus interactions.</p>
		 *
		 *  <p>The SWFLoader control has the following default characteristics:</p>
		 *     <table class="innertable">
		 *        <tr>
		 *           <th>Characteristic</th>
		 *           <th>Description</th>
		 *        </tr>
		 *        <tr>
		 *           <td>Default size</td>
		 *           <td>Width and height large enough for the loaded content</td>
		 *        </tr>
		 *        <tr>
		 *           <td>Minimum size</td>
		 *           <td>0 pixels</td>
		 *        </tr>
		 *        <tr>
		 *           <td>Maximum size</td>
		 *           <td>Undefined</td>
		 *        </tr>
		 *     </table>
		 *
		 *  @mxml
		 *  
		 *  <p>The &lt;mx:SWFLoader&gt; tag inherits all of the tag attributes
		 *  of its superclass and adds the following tag attributes:</p>
		 *
		 *  <pre>
		 *  &lt;mx:SWFLoader
		 *    <strong>Properties</strong>
		 *    autoLoad="true|false"
		 *    loadForCompatibility="false|true"
		 *    loaderContext="null"
		 *    maintainAspectRatio="true|false"
		 *    scaleContent="true|false"
		 *    showBusyCursor="false|true"
		 *    source="<i>No default</i>"
		 *    trustContent="false|true"
		 *  
		 *    <strong>Styles</strong>
		 *    brokenImageBorderSkin="BrokenImageBorderSkin"
		 *    brokenImageSkin="<i>'__brokenImage' symbol in Assets.swf</i>"
		 *    horizontalAlign="left|center|right"
		 *    verticalAlign="top|middle|bottom"
		 *  
		 *    <strong>Effects</strong>
		 *    completeEffect="<i>No default</i>"
		 *    
		 *    <strong>Events</strong>
		 *    complete="<i>No default</i>"
		 *    httpStatus="<i>No default</i>"
		 *    init="<i>No default</i>"
		 *    ioError="<i>No default</i>"
		 *    open="<i>No default</i>"
		 *    progress="<i>No default</i>"
		 *    securityError="<i>No default</i>"
		 *    unload="<i>No default</i>"
		 *  /&gt;
		 *  </pre>
		 *  
		 *  @includeExample examples/local.mxml -noswf
		 *  @includeExample examples/SimpleLoader.mxml
		 *
		 *  @see mx.controls.Image
		 */
        private var SWF_LOADER:SWFLoader = new SWFLoader();
        
		public function c_SWFLoader()
		{
			handle_events();
		}

		private static var instance:c_SWFLoader = null;
		
		public static function singleton():c_SWFLoader
		{
			if (instance == null) 
			{
				instance = new c_SWFLoader();
			}
			return instance;
		}

		/** loads the given http://url/file.swf into CONTAINER **/
		public var CONTAINER:Container = null;
        public function load_swf(URL:String = '',CONTAINER:Container = null):void
        {
            if(URL != '')
            {
	            SWF_LOADER.showBusyCursor = true;
	            SWF_LOADER.load(URL); 
            }
        	if(CONTAINER != null)
        	{
        		this.CONTAINER = CONTAINER;
        		CONTAINER.addChild(SWF_LOADER);
        	}
        }
        
        public function handle_events(event:Event = null):void
        {
            if(SWF_LOADER.hasEventListener(Event.INIT) == false)
            {
	            SWF_LOADER.addEventListener(Event.INIT,handle_events);
            }
            if(SWF_LOADER.hasEventListener(FlexEvent.CREATION_COMPLETE) == false)
            {
	            SWF_LOADER.addEventListener(FlexEvent.CREATION_COMPLETE,handle_events);
            }
            if(SWF_LOADER.hasEventListener(Event.UNLOAD) == false)
            {
	            SWF_LOADER.addEventListener(Event.UNLOAD,handle_events);
            }
            if(SWF_LOADER.hasEventListener(Event.OPEN) == false)
            {
	            SWF_LOADER.addEventListener(Event.OPEN,handle_events);
            }
            if(SWF_LOADER.hasEventListener(Event.COMPLETE) == false)
            {
	            SWF_LOADER.addEventListener(Event.COMPLETE,handle_events);
            }

            if(event == null)
            {
            	
            }
            else
            {
            	if(event.type == Event.COMPLETE)
            	{
            		this.dispatchEvent(new Event(Event.COMPLETE));
            	}
            	if(event.type == FlexEvent.CREATION_COMPLETE)
            	{
            		this.dispatchEvent(new Event(FlexEvent.CREATION_COMPLETE));
            	}
            }
        }

        public function display_swf(CONTAINER:Container,x:Number = NaN,y:Number = NaN,width:Number = NaN,height:Number = NaN):Boolean
        {
        	var SUCCESFULL:Boolean = true;
        	try
        	{
        		if(isNaN(x) == false)
        		{
	        		SWF_LOADER.x = x;
        		}
        		if(isNaN(y) == false)
        		{
	        		SWF_LOADER.y = y;
        		}
        		if(isNaN(width) == false)
        		{
	        		SWF_LOADER.width = width;
        		}
        		if(isNaN(height) == false)
        		{
	        		SWF_LOADER.height = height;
        		}
				CONTAINER.addChild(SWF_LOADER);
        	}
        	catch(e:Error)
        	{
        		SUCCESFULL = false;
        		trace('display_swf: '+e);
        	}
			return SUCCESFULL;        	
        }

	}
}